0 QTRS
↳1 Overlay + Local Confluence (⇔)
↳2 QTRS
↳3 DependencyPairsProof (⇔)
↳4 QDP
↳5 DependencyGraphProof (⇔)
↳6 AND
↳7 QDP
↳8 UsableRulesProof (⇔)
↳9 QDP
↳10 QReductionProof (⇔)
↳11 QDP
↳12 QDPSizeChangeProof (⇔)
↳13 YES
↳14 QDP
↳15 UsableRulesProof (⇔)
↳16 QDP
↳17 QReductionProof (⇔)
↳18 QDP
↳19 QDPSizeChangeProof (⇔)
↳20 YES
↳21 QDP
↳22 UsableRulesProof (⇔)
↳23 QDP
↳24 QReductionProof (⇔)
↳25 QDP
↳26 QDPOrderProof (⇔)
↳27 QDP
↳28 DependencyGraphProof (⇔)
↳29 TRUE
↳30 QDP
↳31 UsableRulesProof (⇔)
↳32 QDP
↳33 QReductionProof (⇔)
↳34 QDP
↳35 MRRProof (⇔)
↳36 QDP
↳37 MRRProof (⇔)
↳38 QDP
↳39 QReductionProof (⇔)
↳40 QDP
↳41 Narrowing (⇔)
↳42 QDP
↳43 UsableRulesProof (⇔)
↳44 QDP
↳45 QReductionProof (⇔)
↳46 QDP
↳47 Instantiation (⇔)
↳48 QDP
↳49 Instantiation (⇔)
↳50 QDP
↳51 DependencyGraphProof (⇔)
↳52 AND
↳53 QDP
↳54 NonTerminationProof (⇔)
↳55 NO
↳56 QDP
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
LEQ(s(x), s(y)) → LEQ(x, y)
SPLIT(cons(x, cons(y, xs))) → SPLIT1(x, y, split(xs))
SPLIT(cons(x, cons(y, xs))) → SPLIT(xs)
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
MERGE(cons(x, xs), cons(y, ys)) → LEQ(x, y)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
MERGESORT(xs) → MERGESORT1(split(xs))
MERGESORT(xs) → SPLIT(xs)
MERGESORT1(app(xs, ys)) → MERGE(mergesort(xs), mergesort(ys))
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
SPLIT(cons(x, cons(y, xs))) → SPLIT(xs)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
SPLIT(cons(x, cons(y, xs))) → SPLIT(xs)
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
SPLIT(cons(x, cons(y, xs))) → SPLIT(xs)
From the DPs we obtained the following set of size-change graphs:
LEQ(s(x), s(y)) → LEQ(x, y)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
LEQ(s(x), s(y)) → LEQ(x, y)
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
LEQ(s(x), s(y)) → LEQ(x, y)
From the DPs we obtained the following set of size-change graphs:
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
POL( IFMERGE(x1, ..., x5) ) = 2x1 + x4 + x5 + 2
POL( leq(x1, x2) ) = 2
POL( 0 ) = 2
POL( tt ) = 2
POL( s(x1) ) = 2x1 + 1
POL( ff ) = 2
POL( MERGE(x1, x2) ) = x1 + x2 + 2
POL( cons(x1, x2) ) = x2 + 2
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT(xs) → MERGESORT1(split(xs))
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT(xs) → MERGESORT1(split(xs))
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT(xs) → MERGESORT1(split(xs))
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
POL(MERGESORT(x1)) = 1 + x1
POL(MERGESORT1(x1)) = x1
POL(app(x1, x2)) = 1 + x1 + x2
POL(cons(x1, x2)) = 1 + 2·x1 + 2·x2
POL(nil) = 0
POL(split(x1)) = 1 + x1
POL(split1(x1, x2, x3)) = 2 + 2·x1 + 2·x2 + 2·x3
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT(xs) → MERGESORT1(split(xs))
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
POL(MERGESORT(x1)) = 2·x1
POL(MERGESORT1(x1)) = x1
POL(app(x1, x2)) = 2·x1 + 2·x2
POL(cons(x1, x2)) = 2 + 2·x1 + 2·x2
POL(nil) = 0
POL(split(x1)) = 2·x1
POL(split1(x1, x2, x3)) = 2 + x1 + 2·x2 + 2·x3
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT(xs) → MERGESORT1(split(xs))
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
split1(x0, x1, app(x2, x3))
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT(xs) → MERGESORT1(split(xs))
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
MERGESORT(nil) → MERGESORT1(app(nil, nil))
MERGESORT(cons(x0, nil)) → MERGESORT1(app(cons(x0, nil), nil))
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
MERGESORT(nil) → MERGESORT1(app(nil, nil))
MERGESORT(cons(x0, nil)) → MERGESORT1(app(cons(x0, nil), nil))
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
MERGESORT(nil) → MERGESORT1(app(nil, nil))
MERGESORT(cons(x0, nil)) → MERGESORT1(app(cons(x0, nil), nil))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
MERGESORT(nil) → MERGESORT1(app(nil, nil))
MERGESORT(cons(x0, nil)) → MERGESORT1(app(cons(x0, nil), nil))
MERGESORT1(app(nil, nil)) → MERGESORT(nil)
MERGESORT1(app(cons(z0, nil), nil)) → MERGESORT(cons(z0, nil))
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
MERGESORT(nil) → MERGESORT1(app(nil, nil))
MERGESORT(cons(x0, nil)) → MERGESORT1(app(cons(x0, nil), nil))
MERGESORT1(app(nil, nil)) → MERGESORT(nil)
MERGESORT1(app(cons(z0, nil), nil)) → MERGESORT(cons(z0, nil))
MERGESORT1(app(nil, nil)) → MERGESORT(nil)
MERGESORT1(app(cons(z0, nil), nil)) → MERGESORT(nil)
MERGESORT(nil) → MERGESORT1(app(nil, nil))
MERGESORT(cons(x0, nil)) → MERGESORT1(app(cons(x0, nil), nil))
MERGESORT1(app(nil, nil)) → MERGESORT(nil)
MERGESORT1(app(cons(z0, nil), nil)) → MERGESORT(cons(z0, nil))
MERGESORT1(app(cons(z0, nil), nil)) → MERGESORT(nil)
MERGESORT1(app(nil, nil)) → MERGESORT(nil)
MERGESORT(nil) → MERGESORT1(app(nil, nil))
MERGESORT1(app(cons(z0, nil), nil)) → MERGESORT(cons(z0, nil))
MERGESORT(cons(x0, nil)) → MERGESORT1(app(cons(x0, nil), nil))